<?php
/**
 * Acl用户
 *
 * @since 0.1
 * @package net.4kiki.acl
 */
class IAclUser extends IAclRole {
	private $allows = array();
	private $denies = array();	
	
	/**
	 * 角色
	 *
	 * @var IAclRole
	 */
	private $role;
	
	/**
	 * 构造器
	 *
	 * @param IAclRole $role 角色
	 * @since 0.1
	 */
	public function __construct(IAclRole $role) {
		$this->role = $role;
	}
	
	/**
	 * 设置角色
	 *
	 * @param IAclRole $role 角色
	 * @since 0.1
	 */
	public function setRole(IAclRole $role) {
		$this->role = $role;
	}
	
	/**
	 * 取得角色
	 *
	 * @return IAclRole
	 * @since 0.1
	 */
	public function getRole() {
		return $this->role;
	}
	
	/**
	 * 添加允许的资源
	 *
	 * @param IAclResource $resource 资源
	 * @since 0.1
	 */
	public function allow(IAclResource $resource) {
		$this->allows[$resource->getName()] = $resource;
	}
	
	/**
	 * 添加禁止的资源
	 *
	 * @param IAclResource $resource 资源
	 * @since 0.1
	 */
	public function deny(IAclResource $resource) {
		$this->denies[$resource->getName()] = $resource;
	}
	
	/**
	 * 是否允许执行某个资源
	 *
	 * @param IAclResource $resource
	 * @return boolean
	 * @since 0.1
	 */
	public function isAllowed(IAclResource $resource) {
		if (!$this->role->isAllowed($resource)) {
			return false;
		}
		$name = $resource->getName();
		if (array_key_exists($name, $this->denies)) {
			return false;
		}
		if (array_key_exists($name, $this->allows)) {
			return true;
		}
		return false;
	}
}

?>